package com.duoduo.数组;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @author dl.chai
 * @version 1.0
 * @description: 字母异位词分组49
 * 给你一个字符串数组，请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
 * <p>
 * 字母异位词 是由重新排列源单词的字母得到的一个新单词，所有源单词中的字母通常恰好只用一次。
 * <p>
 * <p>
 * <p>
 * 示例 1:
 * <p>
 * 输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
 * 输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
 * 示例 2:
 * <p>
 * 输入: strs = [""]
 * 输出: [[""]]
 * @date 2023/3/11 10:39
 */

public class 字母异位词分组49 {
    public List<List<String>> groupAnagrams1(String[] strs) {
        return new ArrayList<>(Arrays.stream(strs).collect(Collectors.groupingBy(str -> str.chars().sorted().collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append).toString())).values());
    }
    public List<List<String>> groupAnagrams(String[] strs) {
        List<List<String>> result = new ArrayList<>();
        Map<String, List<String>> collect = Arrays.stream(strs).collect(Collectors.groupingBy(item -> {
            char[] chars = item.toCharArray();
            Arrays.sort(chars);
            return new String(chars);
        }));
        /**
        *  遍历collect
        */
        collect.forEach((k, v) -> {
            List<String> strings = new ArrayList<>(v);
            result.add(strings);
        });
        return result;
    }
}
